[SDCTF 2022]printFAILED 复现
printFAILED
这是一道格式化字符串漏洞,出的比较特别,特别搜了下,跟大家分析一下
查看一下保护机制,发现按正常套路求不出偏移

再看看ida,发现里面有flag.txt,但是被scramble函数打乱了,需要我们guess,在printf那一行也出现了flag,我们可以尝试把flag的内容打印出来

nc一下,发现flag存在第四个参数(格式化字符串传参的规定,格式化字符串存放在rdi,因此printf函数会从rsi开始寻找参数),得到的这串代码是不是有点像flag了,有点那味了,接下来就可以看看scramble函数是怎么打乱flag


scramble函数
这段代码定义了一个名为 scramble 的函数,它接受一个整型参数 a1。该函数的作用是对全局变量 flag 中的前 a1 个字符进行递增。
在函数内部,首先定义了一个名为 i 的循环计数器变量。然后使用一个无限循环来遍历 flag 变量中的前 a1 个字符。在每次循环中,函数都会将 flag[i] 变量的值递增 1。
当循环计数器 i 的值大于等于 a1 时,循环结束,函数返回 i 的值。
这里我知识有限,看不出这是什么加密的,别人用按位运算sub来解码,直接可以得到flag

exp如下:
from pwn import * |
总结
做这道格式化字符串漏洞的题,也算是给我开阔了自己的视野,还是要好好加强自己的能力,冲冲冲,干就完事了!!!
Video Tutorial: https://www.youtube.com/watch?v=gSLdg4mipYs(此题讲解的视频)